#pragma warning disable 108
using System;
using System.Runtime.InteropServices;
using System.Collections.Generic;
using Cephei;
using Cephei.Generic;
using Cephei.QL.Models.Marketmodels;
using Cephei.QL.Math;
namespace Cephei.QL.Models.Marketmodels.Pathwisegreeks
{
     // <summary> 
	// ! In order to compute market vegas, we need a class that gives the derivative of a cap implied vol against changes in pseudo-root elements. This is that class.  The operation is non-trivial because the cap implied vol has a complicated relationship with the caplet implied vols.  This is  tested in the pathwise vegas routine in MarketModels.cpp
	// </summary>
    [Guid ("B070D7E2-3E8A-494b-A2B2-AD486673C3F8"),ComVisible(true)]
	public interface ICapPseudoDerivative 
	{
		///////////////////////////////////////////////////////////////
        // Methods
        //
        
		 Double ImpliedVolatility {get;}
        
		 Cephei.QL.Math.IMatrix PriceDerivative(UInt64 i);
        
		 Cephei.QL.Math.IMatrix VolatilityDerivative(UInt64 i);
    }

    // <summary> 
	// ! In order to compute market vegas, we need a class that gives the derivative of a cap implied vol against changes in pseudo-root elements. This is that class.  The operation is non-trivial because the cap implied vol has a complicated relationship with the caplet implied vols.  This is  tested in the pathwise vegas routine in MarketModels.cpp Factory
	// </summary>
   	[ComVisible(true)]
    public interface ICapPseudoDerivative_Factory // : Collection_Factory<ICapPseudoDerivative, ICell<ICapPseudoDerivative>>
    {
        ///////////////////////////////////////////////////////////////
        // Factory methods
        //
        
	    ICapPseudoDerivative Create (Cephei.QL.Models.Marketmodels.IMarketModel inputModel, Double strike, UInt64 startIndex, UInt64 endIndex, Double firstDF);
    }
}

